// src/stores/loginStore.js
import { defineStore } from 'pinia';
import { ElMessage } from 'element-plus';
import LoginApi from '@/api/login.js'; // 导入登录/注册接口
import { useTokenStore } from '@/stores/tokenStore.js'; // 复用tokenStore
import router from '@/router/index.js'; // 全局路由实例

export const useLoginStore = defineStore('login', {
    state: () => ({
        // ---------------------- 1. 登录相关状态 ----------------------
        loginForm: {
            username: '',
            password: ''
        },
        showPassword: false, // 登录/注册密码通用的显示/隐藏状态

        // ---------------------- 2. 注册相关状态 ----------------------
        registerForm: { // 注册表单（用户名/密码/确认密码）
            username: '',
            password: '',
            confirmPassword: '',
            email: '',
            emailCode:''
        },

        // ---------------------- 3. 通用状态 ----------------------
        loading: false, // 登录/注册按钮共用的加载状态

        // ---------------------- 4. 表单验证规则（登录+注册） ----------------------
        rules: {
            // 登录/注册通用的用户名规则
            username: [
                { required: true, message: '请输入用户名', trigger: 'blur' },
                { min: 3, max: 20, message: '用户名长度在 3 到 20 个字符之间', trigger: 'blur' },
                { pattern: /^[a-zA-Z0-9_-]{3,20}$/, message: '用户名仅支持字母、数字、下划线和短横线', trigger: 'blur' }
            ],
            // 登录/注册通用的密码规则
            password: [
                { required: true, message: '请输入密码', trigger: 'blur' },
                { min: 6, max: 20, message: '密码长度在 6 到 20 个字符之间', trigger: 'blur' },
                { pattern: /^(?=.*[a-zA-Z])(?=.*\d).{6,20}$/, message: '密码需包含字母和数字', trigger: 'blur' }
            ],
            // 仅注册需要的“确认密码”规则
            confirmPassword: [
                { required: true, message: '请确认密码', trigger: 'blur' },
                {
                    validator: (rule, value, callback) => {
                        // 校验“确认密码”与“密码”一致性（依赖 registerForm 的 password）
                        const store = useLoginStore(); // 获取当前Store实例
                        if (value !== store.registerForm.password) {
                            callback(new Error('两次输入的密码不一致'));
                        } else {
                            callback();
                        }
                    },
                    trigger: 'blur'
                }
            ]
        }
    }),

    actions: {
        // ---------------------- 登录相关方法 ----------------------
        /**
         * 用户登录（普通用户）
         * @param {Object} formRef - 登录表单实例
         */
        async userLogin(formRef) {
            try {
                // 1. 表单校验
                await formRef.validate();
                // 2. 开启加载
                this.loading = true;
                // 3. 调用登录接口
                const token = await LoginApi.login(this.loginForm);
                // 4. 存储token
                if ( token){
                    const tokenStore = useTokenStore();
                    tokenStore.setToken(token, 'user');
                    // 5. 成功提示 + 跳转
                    this.goToMain();
                    // 6. 重置表单
                    this.resetLoginForm();
                 }

            }  finally {
                // 关闭加载
                this.loading = false;
            }
        },

        /**
         * 管理员登录
         * @param {Object} formRef - 登录表单实例
         */
        async adminLogin(formRef) {
            try {
                await formRef.validate();
                this.loading = true;
                const token = await LoginApi.adminLogin(this.loginForm);
                if (token){
                    const tokenStore = useTokenStore();
                    tokenStore.setToken(token, 'admin');
                    this.goToAdminMain();
                    this.resetLoginForm();
                }
            } finally {
                this.loading = false;
            }
        },

        // ---------------------- 注册相关方法 ----------------------
        /**
         * 用户注册（普通用户）
         * @param {Object} formRef - 注册表单实例
         */
        async userRegister(formRef) {
            try {
                // 1. 表单校验（确认密码规则已在 rules 中定义）
                await formRef.validate();
                // 2. 开启加载
                this.loading = true;
                // 3. 调用注册接口（传递注册表单数据）
                await LoginApi.register(this.registerForm);
                // 4. 成功提示 + 跳转登录页
                this.goToLogin();
                // 5. 重置注册表单
                this.resetRegisterForm();
            }  finally {
                // 关闭加载
                this.loading = false;
            }
        },

        // ---------------------- 通用跳转方法 ----------------------
        goToMain() {
            router.push('/main');
        },
        goToAdminMain() {
            router.push('/adminLayout');
        },
        goToLogin() {
            router.push('/login'); // 跳普通用户登录页
        },
        goToRegister() {
            router.push('/register'); // 跳普通用户注册页
        },
        goToAdminRegister() {
            router.push('/adminRegister'); // 跳管理员注册页
        },

        // ---------------------- 表单重置方法 ----------------------
        // 重置登录表单
        resetLoginForm() {
            this.loginForm = { username: '', password: '' };
            this.showPassword = false;
        },
        // 重置注册表单
        resetRegisterForm() {
            this.registerForm = { username: '', password: '', confirmPassword: '' };
            this.showPassword = false;
        },

        // ---------------------- 密码显示/隐藏切换（登录+注册通用） ----------------------
        ShowPassword() {
            this.showPassword = !this.showPassword;
        }
    }
});